$(function () {
    window.keyword="";
    window.pageNum=1;
    window.pageSize=5;
    // 在全局作用域内创建roleIdArray
    window.roleIdArray = new Array();

    //显示数据
    showPage();

    //绑定查询按钮单击事件
    $("#searchBtn").click(function () {
        //获取关键字
        var keyword=$('#keywordInput').val();
        //验证关键字是否为空
        if (keyword.length==0){
            layer.msg("关键字不能为空");
            return ;
        }
        //更新全局变量
        window.keyword=keyword;
        //刷新数据
        showPage();
    });

    // 全选/全不选功能
    $("#summaryBox").click(function(){
        // 1.获取当前checkbox的选中状态
        var currentStatus = this.checked;
        // 2.设置itemBox的选中状态
        $(".itemBox").prop("checked",currentStatus);

    });

    //绑定批量删除
    $("#batchRemoveBtn").click(function () {
        //清空数据
        window.roleIdArray = new Array();

        var length=$('.itemBox:checked').length;
        if (length==0){
            layer.msg("请至少选中一行数据！");
            return ;
        }
        //获取选中id,放到数组中

        $('.itemBox:checked').each(function () {
            var roleId=$(this).attr("roleid");
            window.roleIdArray.push(roleId);
        });

        //弹出模态框
        showRemoveConfirmModal();
    });

    //删除
    $('#confirmModalBtn').click(function () {
        var requestBody = JSON.stringify(window.roleIdArray);
        //发送ajax请求
        $.ajax({
            url:"/role/batch/remove",
            type:"post",
            data:requestBody,
            contentType:"application/json;charset=UTF-8",
            dataType:"json",
            success:function (ajaxResult) {
                if(ajaxResult.result=="SUCCESS"){
                    //删除成功
                    layer.msg("删除成功");
                    showPage();
                }else{
                    layer.msg("删除失败");

                }
            }
        });

        //关闭模态框
        $("#confirmModal").modal("hide");
    });

    //绑定单条删除
    $("#roleTableBody").on("click",".removeBtn",function () {
        window.roleIdArray = new Array();
        var roleId=$(this).attr("roleid");
        window.roleIdArray.push(roleId);

        //调用批量删除的方法
        showRemoveConfirmModal();
    });

    //绑定添加
    $('#addBtn').click(function () {
        $('#addModal').modal("show");
    });

    //添加
    $("#addModalBtn").click(function () {
        var roleNameInput=$('#roleNameInput').val();
        if(roleNameInput.length==0){
            layer.msg("请填写角色名称");
            return;
        }
        $.ajax({
            url: "/role/save/role",
            type: "post",
            data: {
                "roleName": roleNameInput
            },
            dataType: "json",
            success: function (ajaxResult) {
                if (ajaxResult.result=="SUCCESS"){
                    layer.msg("添加角色成功！");
                    showPage();
                }else{
                    layer.msg("添加角色数据失败！");
                }
            }
        });
        $('#addModal').modal("hide");
    });

    //绑定修改
    $("#roleTableBody").on("click",".editBtn",function () {
        var roleId=$(this).attr("roleid");
        window.roleId=roleId;

        //获取角色名称
        var name=$(this).parent().prev().text();
        //把name写到模态框中
        $('#roleNameInputEdit').val(name);
        //弹出模态框
        $("#editModal").modal("show");
    });

    //更新
    $('#editModalBtn').click(function () {
        var name=$('#roleNameInputEdit').val();

        if(name.length==0){
            layer.msg("请填写角色名称");
            return;
        }
        $.ajax({
            url: "/role/update/role",
            type: "post",
            data: {
                "name": name,
                "id":window.roleId
            },
            dataType: "json",
            success: function (ajaxResult) {
                if (ajaxResult.result=="SUCCESS"){
                    layer.msg("修改角色成功！");
                    showPage();
                }else{
                    layer.msg("修改角色数据失败！");
                }
            }
        });
        $('#editModal').modal("hide");
    });

    //绑定分配权限
    $('#roleTableBody').on("click",".checkBtn",function(){
        //获取角色id保存到全局变量
        window.roleId=$(this).attr("roleid");
        console.log(window.roleId);
        //弹出模态框
        $('#roleAssignAuthModal').modal('show');
        //初始化ztree
        initWholeTree();
    });
    //分配权限
    $("#roleAssignAuthBtn").click(function () {
        var authIdArray = new Array();
        // 调用zTreeObj的方法获取当前已经被勾选的节点
        var checkedNodes=$.fn.zTree.getZTreeObj("treeDemo").getCheckedNodes();

        for(var i = 0; i < checkedNodes.length; i++) {
            // 获取具体的一个节点
            var node = checkedNodes[i];
            // 获取当前节点的id属性
            var authId = node.id;
            // 将authId存入数组
            authIdArray.push(authId);
        }
        var requestBody = {"roleIdList":[window.roleId], "authIdList": authIdArray};
        // 发送请求
        $.ajax({
            "url": "/assign/do/assign",
            "type": "post",
            "data": JSON.stringify(requestBody),
            "contentType": "application/json;charset=UTF-8",
            "dataType": "json",
            success:function (ajaxResult) {
                if(ajaxResult.result == "SUCCESS") {
                    layer.msg("操作成功！");
                }

                if(ajaxResult.result == "FAILED") {
                    layer.msg(ajaxResult.message);
                }
                $("#roleAssignAuthModal").modal("hide");
            }
        });
    });

    });


//显示数据
function showPage() {
    //发送ajax请求，渲染数据
    $.ajax({
        url:"/role/search/by/keyword",
        type:"post",
        dataType:"JSON",
        data:{
            "keyword":window.keyword,
            "pageNum":window.pageNum,
            "pageSize":window.pageSize
        },
        success:function (ajaxResult) {
            if (ajaxResult.result=="SUCCESS"){
                //清空原来的数据
                $("#roleTableBody").empty();
                //获取数据
                var list=ajaxResult.data.list;
                if (list.length>0){
                    //有数据
                    for(var i=0;i<list.length;i++){
                        var $tr=$('<tr></tr>');
                        var $td1=$('<td>'+(i+1)+'</td>');
                        var $td2=$('<td><input roleid="'+list[i].id+'" class="itemBox" type="checkbox"></td>');
                        var $td3=$('<td>'+list[i].name+'</td>');
                        var $td4=$('<td></td>');
                        $td4.append('<button roleid="'+list[i].id+'" type="button" class="checkBtn btn btn-success btn-xs"><i class=" glyphicon glyphicon-check"></i></button>');
                        $td4.append('<button roleid="'+list[i].id+'" type="button" class="editBtn btn btn-primary btn-xs">' +
                            '<i class=" glyphicon glyphicon-pencil"></i>' +
                            '</button>');
                        $td4.append('<button roleid="'+list[i].id+'" type="button" class="removeBtn btn btn-danger btn-xs">' +
                            '<i class=" glyphicon glyphicon-remove"></i>' +
                            '</button>');

                        $tr.append($td1);
                        $tr.append($td2);
                        $tr.append($td3);
                        $tr.append($td4);

                        $("#roleTableBody").append($tr);
                    }

                    //调用分页
                    initPagination(ajaxResult.data);
                }else{
                    //没数据
                    var $tr=$('<tr></tr>');
                    var $td=$('<td colspan="4">对不起，没有查询到相应的角色！！</td>');
                    $tr.append($td);
                    $("#roleTableBody").append($tr);
                }
            }else{
                layer.msg("获取角色数据失败！");
            }
        }
    });
}

// 声明函数封装导航条初始化操作
function initPagination(pageInfo) {
    // 声明变量存储总记录数
    var totalRecord = pageInfo.total;
    // 声明变量存储分页导航条显示时的属性设置
    var paginationProperties = {
        num_edge_entries : 3,        //边缘页数
        num_display_entries : 4,      //主体页数
        callback : pageselectCallback, //回调函数
        items_per_page : window.pageSize,    //每页显示数据数量，就是pageSize
        current_page : window.pageNum-1,//当前页页码
        prev_text : "上一页",       //上一页文本
        next_text : "下一页"        //下一页文本
    };
    // 显示分页导航条
    $("#Pagination").pagination(totalRecord, paginationProperties);
}

// 在每一次点击“上一页”、“下一页”、“页码”时执行这个函数跳转页面
function pageselectCallback(pageIndex, jq) {
    // pageIndex从0开始，pageNum从1开始
    var pageNum = pageIndex + 1;
    //更新当前页
    window.pageNum=pageNum;
    var keyword=window.keyword;
    // 跳转页面
    showPage();

    return false;
}

function showRemoveConfirmModal() {
    //清空
    $("#confirmModalTableBody").empty();
    $("#confirmModal").modal("show");

    //把角色id数组转成json
    var requestBody = JSON.stringify(window.roleIdArray);
    //显示要删除的数据
    $.ajax({
        url:"/role/get/list/by/id/list",
        type:"post",
        data:requestBody,
        contentType:"application/json;charset=UTF-8",
        dataType:"json",
        success:function (ajaxResult) {
            if (ajaxResult.result=="SUCCESS"){
                var list=ajaxResult.data;
                for(var i=0;i<list.length;i++){
                    var $tr=$('<tr></tr>');
                    var $td1=$('<td>'+(i+1)+'</td>');
                    var $td2=$('<td>'+list[i].name+'</td>');
                    $tr.append($td1);
                    $tr.append($td2);

                    $("#confirmModalTableBody").append($tr);
                }

            }else{
                layer.msg("数据加载失败！");
            }
        }
    });
}
function initWholeTree() {
    var setting = {
        "data": {
            "simpleData": {
                "enable": true,
                "pIdKey": "categoryId"
            },
            "key": {
                "name": "title"
            }
        },
        "check": {
            "enable": true
        }
    };
    // 2.获取JSON数据
    $.ajax({
        "url": "/assign/get/all/auth",
        "type": "post",
        "dataType": "json",
        success:function (ajaxResult) {
            if(ajaxResult.result == "FAILED") {
                layer.msg(ajaxResult.message);
                return ;
            }
            var zNodes = ajaxResult.data;
            // 3.初始化树形结构
            $.fn.zTree.init($("#treeDemo"), setting, zNodes);
            //展开所有节点
            $.fn.zTree.getZTreeObj("treeDemo").expandAll(true);

            //回显已分配权限
            goBackAuth();
        }
    });
}
//回显已分配权限
function goBackAuth() {
    ajaxResult = $.ajax({
        "url": "/assign/get/assigned/auth/id/list",
        "type": "post",
        "data": {
            "roleId": window.roleId,
            "random": Math.random()
        },
        "dataType": "json",
        success:function (ajaxResult) {
            if(ajaxResult.result == "FAILED") {
                layer.msg(ajaxResult.message);
                return ;
            }

            var authIdList = ajaxResult.data;

            // 6.使用authIdList勾选对应的树形节点
            // ①遍历authIdList
            for (var i = 0; i < authIdList.length; i++) {
                // ②在遍历过程中获取每一个authId
                var authId = authIdList[i];

                // ③根据authId查询到一个具体的树形节点
                // key：查询节点的属性名
                // value：查询节点的属性值，这里使用authId
                var key = "id";

                var treeNode = $.fn.zTree.getZTreeObj("treeDemo").getNodeByParam(key, authId);

                // ④勾选找到的节点
                // treeNode：当前要勾选的节点
                // true：表示设置为勾选状态
                // false：表示不联动
                $.fn.zTree.getZTreeObj("treeDemo").checkNode(treeNode, true, false);
            }
        }
    });
}